
#include <intrins.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "type_def.h"
#include "sks_JSON.h"

// 跳过空白字符
void skipWhitespace(char *str, int *index) {
    while (str[*index] == ' ' || str[*index] == '\t' || str[*index] == '\n' || str[*index] == '\r') {
        (*index)++;
    }
}

// 解析字符串
int parseString(char *str, int *index, char *output, int maxLen) {
    int i = 0;
    skipWhitespace(str, index);
    if (str[*index] != '"') {
        return 0; // 不是字符串开头
    }
    (*index)++; // 跳过双引号
    while (str[*index] != '"' && str[*index] != '\0' && i < maxLen - 1) {
        output[i++] = str[*index];
        (*index)++;
    }
    output[i] = '\0'; // 字符串结束符
    if (str[*index] == '"') {
        (*index)++; // 跳过结尾的双引号
    }
    return 1;
}

// 解析键值对
int parseJsonPair(char *str, int *index, JsonPair *pair) {
    skipWhitespace(str, index);
    if (!parseString(str, index, pair->key, MAX_KEY_LEN)) {
        return 0; // 解析键失败
    }
    skipWhitespace(str, index);
    if (str[*index] != ':') {
        return 0; // 缺少冒号
    }
    (*index)++; // 跳过冒号
    skipWhitespace(str, index);
    if (!parseString(str, index, pair->value, MAX_VALUE_LEN)) {
        return 0; // 解析值失败
    }
    return 1;
}

// 解析JSON对象
int parseJsonObject(char *str, int *index, JsonObject *json) {
    skipWhitespace(str, index);
    if (str[*index] != '{') {
        return 0; // 不是JSON对象开头
    }
    (*index)++; // 跳过左大括号
    json->count = 0;
    while (str[*index] != '}' && str[*index] != '\0' && json->count < MAX_PAIRS) {
        if (!parseJsonPair(str, index, &json->pairs[json->count])) {
            return 0; // 解析键值对失败
        }
        json->count++;
        skipWhitespace(str, index);
        if (str[*index] == ',') {
            (*index)++; // 跳过逗号
        }
    }
    if (str[*index] == '}') {
        (*index)++; // 跳过右大括号
    }
    return 1;
}

//获取json对象中的 数字值
int getJsonInt(JsonObject *json,char *key){
	u8 i;
    for ( i = 0; i < json->count; i++) {
			if(strncmp(json->pairs[i].key, key) == 0){
				return atoi(json->pairs[i].value);
			}
    }
		return 0;
}

//获取json对象中的 字符串值
char* getJsonStr(JsonObject *json,char *key){
	u8 i;
    for ( i = 0; i < json->count; i++) {
			if(strncmp(json->pairs[i].key, key) == 0){
				return (json->pairs[i].value);
			}
    }
		return "";
}

// 打印JSON对象
void printJsonObject(JsonObject *json) {
	u8 i;
	char xdata buffer[100];
    for ( i = 0; i < json->count; i++) {
			sprintf( buffer,  "Key: %s, Value: %s\n", json->pairs[i].key, json->pairs[i].value);
#ifdef __sks_string__
			loggerString(buffer);
#endif
    }
}